/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Initial Developer of the Original Code is
*   Nick Kreeger
* Portions created by the Initial Developer are Copyright (C) 2006-2007
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*   Nick Kreeger <nick.kreeger@park.edu>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */

#import <Cocoa/Cocoa.h>
#import "MessageAccount.h"

@class IdentityView;
@class ServerInfoView;
@class UserNamesView;
@class AccountNameView;
@class AccountSummaryView;

typedef enum {
  eIdentityViewIndex,
  eServerInfoViewIndex,
  eUserNamesViewIndex,
  eAccountNameViewIndex,
  eAccountSummaryViewIndex
} ESetupViewIndex;

/**
 * This protocol is for individual Views inside the new
 * account dialog. This protocol gives feedback of the
 * entered information.
 */
@protocol NewAccountView

-(BOOL)canGoForward;
-(BOOL)canGoBackward;
-(void)clearValues;

@end

@interface NewAccountController : NSObject 
{
  IBOutlet NSWindow* mWindow;
  IBOutlet NSView*   mSetupView;  // gets swapped in and out.
  IBOutlet NSButton* mCancelButton;
  IBOutlet NSButton* mGoBackButton;
  IBOutlet NSButton* mContinueButton;
  
  IBOutlet IdentityView*       mIdentityView;
  IBOutlet ServerInfoView*     mServerInfoView;
  IBOutlet UserNamesView*      mUserNamesView;
  IBOutlet AccountNameView*    mAccountNameView;
  IBOutlet AccountSummaryView* mAccountSummaryView;
  
  MessageAccount* mMessageAccount;
  ESetupViewIndex mCurSetupViewIndex;
}

+(NewAccountController*)sharedInstance;

-(void)runNewAccountDialog:(NSWindow*)aParentWindow;

-(IBAction)cancel:(id)sender;
-(IBAction)goBack:(id)sender;
-(IBAction)doContinue:(id)sender;

@end

#pragma mark - 

@interface IdentityView : NSView <NewAccountView>
{
  IBOutlet NSTextField* mNameField;
  IBOutlet NSTextField* mAddressField;
  IBOutlet NSTextField* mErrorField;
}

-(NSString*)fullName;
-(NSString*)emailAddress;

@end

@interface ServerInfoView : NSView <NewAccountView>
{
  IBOutlet NSMatrix*    mServerTypeMatrix;
  IBOutlet NSTextField* mIncomingServerField;
  IBOutlet NSTextField* mOutgoingServerField;
  IBOutlet NSButton*    mUseGlobalInboxButton;
  IBOutlet NSTextField* mErrorField;
}

-(NSString*)incomingServerName;
-(NSString*)outgoingServerName;
-(BOOL)shouldUseGlobalInbox;
-(EAccountType)accountType;

@end

@interface UserNamesView : NSView <NewAccountView>
{
  IBOutlet NSTextField* mIncomingUserNameField;
  IBOutlet NSTextField* mOutgoingUserNameField;
  IBOutlet NSTextField* mErrorField;
}

-(NSString*)incomingUsername;
-(NSString*)outgoingUsername;

@end

@interface AccountNameView : NSView <NewAccountView>
{
  IBOutlet NSTextField* mAccountNameField;
  IBOutlet NSTextField* mErrorField;
}

-(NSString*)accountName;

@end

@interface AccountSummaryView : NSView <NewAccountView>
{
  IBOutlet NSTextField* mAccountName;
  IBOutlet NSTextField* mEmailAddress;
  IBOutlet NSTextField* mIncomingUsername;
  IBOutlet NSTextField* mIncomingServerName;
  IBOutlet NSTextField* mIncomingServerType;
  IBOutlet NSTextField* mOutgoingUserName;
  IBOutlet NSTextField* mOutgoingServerName;
  IBOutlet NSButton*    mDownloadMessagesNowButton;
}

-(void)setAccountName:(NSString*)aAccountName;
-(void)setEmailAddress:(NSString*)aEmailAddress;
-(void)setIncomingUsername:(NSString*)aIncomingUsername;
-(void)setIncomingServerName:(NSString*)aIncomingServerName;
-(void)setIncomingServerType:(NSString*)aIncomingServerType;
-(void)setOutgoingUsername:(NSString*)aOutgoingUsername;
-(void)setOutgoingServerName:(NSString*)aServerName;
-(BOOL)shouldDownloadMessagesNow;

@end
